/**
 * 监督指令，定义了错误处理策略
 */
export enum SupervisorDirective {
  /**
   * 恢复 Actor，忽略错误
   */
  Resume = 0,
  
  /**
   * 重启 Actor
   */
  Restart = 1,
  
  /**
   * 停止 Actor
   */
  Stop = 2,
  
  /**
   * 将错误升级到上级监督者
   */
  Escalate = 3
}

/**
 * 监督者接口，定义了错误处理策略
 */
export interface Supervisor {
  /**
   * 处理 Actor 故障
   * @param pid 发生故障的 Actor 的 PID
   * @param reason 故障原因
   * @returns 监督指令
   */
  handleFailure(pid: any, reason: Error): SupervisorDirective;
}

/**
 * 默认监督者，总是重启 Actor
 */
export const defaultSupervisor: Supervisor = {
  handleFailure: (_pid, _reason) => SupervisorDirective.Restart
}; 